using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CommonUtils;
using System.Xml.Serialization;
using System.Xml.Schema;
using System.Xml;
using System.Text.RegularExpressions;
using System.Collections;

namespace ShellAnywhere.Model
{
	//public enum TargetType : int
	//{
	//    Undef,
	//    Exe,
	//    File,
	//    Folder
	//}
	//public class Point : IXmlSerializable
	//{
	//    #region ctors
	//    public Point() { }
	//    public Point(int? x, int? y) { X = x; Y = y; }
	//    public Point(string point) { FromString(point); }
	//    #endregion ctors

	//    #region props
	//    public int? X { get; set; }
	//    public int? Y { get; set; }
	//    #endregion props

	//    #region methods
	//    public XmlSchema GetSchema() { return null; }

	//    public void ReadXml(XmlReader reader)
	//    {
	//        reader.MoveToAttribute("Point");
	//        string point = reader.ReadContentAsString();
	//        FromString(point);
	//    }

	//    public void WriteXml(XmlWriter writer)
	//    {
	//        writer.WriteStartAttribute("Point");
	//        writer.WriteString(ToString());
	//        writer.WriteEndAttribute();
	//    }
	//    public override string ToString()
	//    {
	//        string x = (X != null) ? X.ToString() : "Auto";
	//        string y = (Y != null) ? Y.ToString() : "Auto";
	//        return "{" + x + "," + y + "}";
	//    }
	//    public void FromString(string point)
	//    {
	//        Match match = Regex.Match(point, "{([A-Za-z0-9]+),([A-Za-z0-9]+)}");
	//        string x = match.Groups[1].ToString();
	//        string y = match.Groups[2].ToString();
	//        X = (!string.IsNullOrEmpty(x) && x != "Auto") ? Convert.ToInt32(x) : default(int?);
	//        Y = (!string.IsNullOrEmpty(y) && y != "Auto") ? Convert.ToInt32(y) : default(int?);
	//    }
	//    #endregion methods
	//}

//    public class Target : Target, ITarget, IParam, IXmlSerializable
//    {
//        #region ctors
//        public Target() { }
//        public Target(string targetPath) : base(System.IO.Path.GetFileNameWithoutExtension(targetPath))
//        {
//            TargetPath = targetPath;
//            LinkPath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), System.IO.Path.GetFileNameWithoutExtension(targetPath) + ".xml");
//        }
//        public Target(string targetPath, string linkPath) : base(System.IO.Path.GetFileNameWithoutExtension(linkPath))
//        {
//            TargetPath = targetPath;
//            LinkPath = linkPath;
//        }
//        public Target(string targetPath, string linkPath, string arguments) : this(targetPath, linkPath)
//        {
//            Arguments = arguments;
//        }
//        public Target(string targetPath, string linkPath, string arguments, string description) : this(targetPath, linkPath, arguments)
//        {
//            Description = description;
//        }
//        #endregion ctors

//        #region props
//        public string TargetPath { get; set; }
//        public string LinkPath { get; set; }
//        public string Arguments { get; set; }
//        public string Description { get; set; }
//        public Point Position { get; set; }
//        public Point Size { get; set; }

//        public TargetType TargetType
//        {
//            get
//            {
//                TargetType type = TargetType.Undef;
//                if (System.IO.Path.GetFileNameWithoutExtension(LinkPath) == ".exe.")
//                    type = TargetType.Exe;
//                else if (Directory.Exists(LinkPath))
//                    type = TargetType.Folder;
//                else if (File.Exists(LinkPath))
//                    type = TargetType.File;
//                return type;
//            }
//        }	

//        #endregion props

//        #region methods
//        public override IParam Clone()
//        {
//            IParam clone = new Target(TargetPath, LinkPath, Arguments, Description);
//            clone.Dot = Dot;
//            return clone;
//        }
//        public XmlSchema GetSchema() { return null; }

//        public void ReadXml(XmlReader reader)
//        {
//            reader.MoveToAttribute("Value");
//            Value = reader.ReadContentAsString();
//            reader.MoveToAttribute("TargetPath");
//            TargetPath = reader.ReadContentAsString();
//            reader.MoveToAttribute("LinkPath");
//            LinkPath = reader.ReadContentAsString();
//            reader.MoveToAttribute("Arguments");
//            Arguments = reader.ReadContentAsString();
//            reader.MoveToAttribute("Description");
//            Description = reader.ReadContentAsString();
//            reader.MoveToAttribute("Position");
//            Position = new Point(reader.ReadContentAsString());
//            reader.MoveToAttribute("Size");
//            Size = new Point(reader.ReadContentAsString());
//        }

//        public void WriteXml(XmlWriter writer)
//        {
//            writer.WriteStartAttribute("Value");
//            writer.WriteString(Value);
//            writer.WriteEndAttribute();
//            writer.WriteStartAttribute("TargetPath");
//            writer.WriteString(TargetPath);
//            writer.WriteEndAttribute();
//            writer.WriteStartAttribute("LinkPath");
//            writer.WriteString(LinkPath);
//            writer.WriteEndAttribute();
//            writer.WriteStartAttribute("Arguments");
//            writer.WriteString(Arguments);
//            writer.WriteEndAttribute();
//            writer.WriteStartAttribute("Description");
//            writer.WriteString(Description);
//            writer.WriteEndAttribute();
//            writer.WriteStartAttribute("Position");
//            writer.WriteString(Position.ToString());
//            writer.WriteEndAttribute();
//            writer.WriteStartAttribute("Size");
//            writer.WriteString(Size.ToString());
//            writer.WriteEndAttribute();
//        }
//        #endregion methods

//        #region fields
//        #endregion fields
//    }

//    public class LinkList : List<Target>, IList<Target>, IXmlSerializable
//    {
//        #region methods
//        public XmlSchema GetSchema() { return null; }
//        public XmlSerializer GetLinkSerializer() { return new XmlSerializer(typeof(Target)); }
//        public void ReadXml(XmlReader reader)
//        {
//            XmlSerializer ls = GetLinkSerializer();
//            reader.ReadStartElement();
//            {
//                while (ls.CanDeserialize(reader) )
//                {
//                    this.Add(ls.Deserialize(reader) as Target);
//                    reader.ReadStartElement();
//                }
//            }
//            reader.ReadEndElement();
//        }
//        public void WriteXml(XmlWriter writer)
//        {
//            XmlSerializer ls = GetLinkSerializer();
//            foreach (Target item in this)
//                ls.Serialize(writer, item);
//        }
		
//        #endregion methods
//    }
//}